"""
使用ThreadLocal解决参数在一个线程中各个函数之间互相传递的问题。

ThreadLocal常用的场景：
    为每个线程绑定一个数据库连接，HTTP请求，用户身份信息等，这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源。
"""

import threading

# 创建全局ThreadLocal对象
local_school = threading.local()


def process_student():
    # 获取当前线程关联的student
    student = local_school.student
    print("你好， {student} in ({thread_name})".format(student=student, thread_name=threading.current_thread().name))


def process_thread(student):
    # 绑定ThreadLocal的student
    local_school.student = student
    process_student()


def run():
    t1 = threading.Thread(target=process_thread, args=("Kevin",), name="线程1")
    t2 = threading.Thread(target=process_thread, args=("Jobs",), name="线程2")
    t1.start()
    t2.start()
    t1.join()
    t2.join()


if __name__ == "__main__":
    run()
